#include<iostream>
using namespace std;
int rmax[100010][20];
int log_2[100010];
int v[100010];
int f[100010][20];
int g[100010][20];
int xwmax(int A,int B){
    int x=log_2[B-A+1];
    return max(rmax[A][x],rmax[B-(1<<x)+1][x]);//闭区间需要考虑A，与B本身
}
int main(){
    int n,q;
    cin>>n>>q;
    for(int i=2;i<=n;i++){
        log_2[i]=log_2[i>>1]+1;
    }
    for(int i=1;i<=n;i++){
        cin>>rmax[i][0]>>v[i];
    }
    for(int j=1;(1<<j)<=n;j++){
        for(int i=1;i<=n-(1<<j)+1;i++){
            rmax[i][j]=max(rmax[i][j-1],rmax[i+(1<<j-1)][j-1]);
        }
    }
    v[n+1]=100000000;
    for(int i=1;i<n;i++){
        int l=i+1;
        int r=n;
        while(l<r){
            int mid= l+r >>1;
            if(xwmax(i+1,mid)<=rmax[i][0])l=mid+1;
            else r=mid;
        }
        f[i][0]=l;
        g[i][0]=v[l];
    }
    f[n][0]=n+1;
    g[n][0]=v[f[n][0]];
    for(int t=1;t<=16;t++){
        for(int i=1;i<=n;i++){
            f[i][t]=f[f[i][t-1]][t-1];
            g[i][t]=g[i][t-1]+g[f[i][t-1]][t-1];//溢出2^t次水池时的水量
        }
    }
    while(q--){
        int r,b;
        scanf("%d%d",&r,&b);
        if(b>v[r]){
            b-=v[r];
            for(int t=16;t>=0;t--){
                if(b>g[r][t]){
                    b-=g[r][t];
                    r=f[r][t];
                }
            }
             r=f[r][0];
        }
        if(r==n+1)r=0;
      printf("%d\n",r);
    }
    return 0;
}